﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// autoCAD Hader
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;

namespace _01CreateGeomagic_Line
{

    public class LineExam
    {
         [CommandMethod("LineExam")]
        public void lineDemo()
        {
            
            // 声明Line对象
            //      空构造
            //      两个点起点(Point3d pointer1)和终点(Point3d pointer2)
            Line line1 = new Line();

            // 设置属性
            // create point object
            Point3d startPoint = new Point3d(100, 100, 0);
            Point3d endPoint = new Point3d(200, 200, 0);
            line1.StartPoint = startPoint;
            line1.EndPoint = endPoint;

            // output line length
            double linelengh = line1.Length;
            Editor editor = Application.DocumentManager.MdiActiveDocument.Editor;
            editor.WriteMessage("the line lengh is:"+linelengh);

            // 声明图形数据库对象
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            // 打开资源管理器 事务处理
            using (Transaction trans= db.TransactionManager.StartTransaction()) 
            {
                // 打开块表
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
                // 打开块表记录
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                // 添加直线到块表记录
                btr.AppendEntity(line1);
                // 更新数据
                trans.AddNewlyCreatedDBObject(line1, true);
                // 事务提交
                trans.Commit();
            }

            // 继续添加直线对象
            Line line2 = new Line(new Point3d(200, 300, 0), new Point3d(300, 350, 0));
            Line line3 = new Line(new Point3d(250, 300, 0), new Point3d(370, 350, 0));
            Line line4 = new Line(new Point3d(280, 90, 0), new Point3d(15, 350, 0));
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                // 打开块表
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
                // 打开块表记录
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                // 添加直线到块表记录
                btr.AppendEntity(line2);
                btr.AppendEntity(line3);
                btr.AppendEntity(line4);

                // 更新数据
                trans.AddNewlyCreatedDBObject(line2, true);
                trans.AddNewlyCreatedDBObject(line3, true);
                trans.AddNewlyCreatedDBObject(line4, true);

                // 事务提交
                trans.Commit();
            }
        }
        
    }
}
